1 package uba.db.sql.language;
2
3 import junit.framework.TestCase;
4 import uba.db.testhelpers.TestUtils;
5
6 /***
7 * @version $Revision: 1.6 $
8 */
9 public class SelectTest extends TestCase {
10 private static final TableSelectionSource FROM_B = new TableSelectionSource(
11 new TableName("B"));
12 private static final SingleSelectionCriteria D_EQ_E = new SingleSelectionCriteria(
13 new EqualComparison(new ColumnName("d"), new ColumnName("e")));
14 private static final SingleSelectionCriteria AC_EQ_BC = new SingleSelectionCriteria(
15 new EqualComparison(new TableName("A").column("c"), new TableName("B")
16 .column("c")));
17 private static final Join FROM_AB = new TableSelectionSource("A")
18 .join(new TableSelectionSource("B"));
19 private static final Select SELECT_FROMAB_WHERE_AC_EQ_BC = new Select(FROM_AB,
20 AC_EQ_BC);
21 private static final TableSelectionSource FROM_A = new TableSelectionSource(
22 new TableName("A"));
23
24 /***
25 * Test para acceder a los "componentes" que conforman un "SELECT"
26 */
27 public void testAccessors() {
28 assertEquals(new DisplayAllColumns(), new Select(FROM_A).displayColumns());
29 assertEquals(FROM_A, new Select(FROM_A).source());
30 assertEquals(new NullSelectionCriteria(), new Select(FROM_A).criteria());
31 }
32
33 /***
34 * Test de igualdad entre dos instancias, selects del tipo: SELECT A.c,d
35 * FROM A,B WHERE A.c=B.c.
36 */
37 public void testEqualsSelect() {
38 DisplayColumns displayColumns = new DisplayOneColumn(new TableName("A")
39 .column("c")).append(new DisplayOneColumn(new ColumnName("d")));
40
41 SingleSelectionCriteria selectionCriteria = AC_EQ_BC;
42
43 Select select = new Select(displayColumns, FROM_AB, selectionCriteria);
44 Select sameSelect = new Select(displayColumns, FROM_AB, selectionCriteria);
45
46 TestUtils.assertEqualsImplementation(select, sameSelect, new Select(FROM_A));
47 }
48
49 /***
50 * Test de igualdad entre dos instancias, selects del tipo: SELECT *, A.c,d
51 * FROM A,B WHERE A.c=B.c.
52 */
53 public void testEqualsSelectWithColumnsWildcard() {
54 DisplayColumns displayColumns = new DisplayAllColumns()
55 .append(new DisplayOneColumn(new TableName("A").column("c"))
56 .append(new DisplayOneColumn(new ColumnName("d"))));
57
58 SingleSelectionCriteria selectionCriteria = AC_EQ_BC;
59
60 Select select = new Select(displayColumns, FROM_AB, selectionCriteria);
61 Select sameSelect = new Select(displayColumns, FROM_AB, selectionCriteria);
62
63 TestUtils.assertEqualsImplementation(select, sameSelect, new Select(FROM_A));
64 }
65
66 /***
67 * Test de igualdad entre dos instancias, selects de mas de una tabla:
68 * SELECT * FROM A,B.
69 */
70 public void testEqualsSelectWithJoin() {
71 TestUtils.assertEqualsImplementation(new Select(FROM_AB),
72 new Select(FROM_AB),
73 new Select(FROM_B));
74 }
75
76 /***
77 * Test de igualdad entre dos instancias, selects de mas de una tabla y con
78 * criterio de seleccion de filas SELECT * FROM A,B WHERE A.c=B.c.
79 */
80 public void testEqualsSelectWithQualifiedSimpleWhere() {
81 TestUtils.assertEqualsImplementation(SELECT_FROMAB_WHERE_AC_EQ_BC, new Select(
82 FROM_AB, AC_EQ_BC), new Select(FROM_B));
83 }
84
85 /***
86 * Test de igualdad entre dos instancias, selects de mas de una tabla y con
87 * criterio de seleccion de filas SELECT * FROM A,B WHERE d=e.
88 */
89 public void testEqualsSelectWithSimpleWhere() {
90 TestUtils.assertEqualsImplementation(new Select(FROM_AB, D_EQ_E), new Select(
91 FROM_AB, D_EQ_E), new Select(FROM_B));
92 }
93
94 /***
95 * Test de igualdad entre dos instancias, selects simples del tipo: SELECT *
96 * FROM table.
97 */
98 public void testSimpleSelectEquals() {
99 TestUtils.assertEqualsImplementation(new Select(FROM_A),
100 new Select(FROM_A),
101 new Select(FROM_B));
102 }
103 }